package mysql

import (
	"github.com/jinzhu/gorm"
	"naio/config"
	"sync"
	"time"
	//调用mysql.init方法,初始化mysql包的变量
	_ "github.com/go-sql-driver/mysql"
)


type Pool struct{}

var instance *Pool
//sync.Once
var once sync.Once
// 创建全局单例数据处理连接 db
var DB *gorm.DB

func GetMysqlPool() *Pool {
	once.Do(func(){
		instance = &Pool{}
	})
	return instance
}

// Database 在中间件中初始化mysql链接
func (m *Pool) Setup() error {
	db, err := gorm.Open(config.Config.DBDriver, config.Config.DBUser+":"+config.Config.DBPass+"@tcp("+config.Config.DBHost+":"+config.Config.DBPort+")/"+config.Config.DBName)
	// Error
	if err != nil {
		//logger.Default().Error("mysql connect error:", err.Error()+config.Config.DBDriver)
		//panic(err.Error() + config.Config.DBDriver)
		//panic(err)
		return err
	}
	if config.Config.DBDebug {
		db = db.Debug()
	}
	db.LogMode(config.Config.DBDebug)
	//db.LogMode(true)
	//设置连接池
	//空闲
	db.DB().SetMaxIdleConns(20)
	//打开
	db.DB().SetMaxOpenConns(100)
	//超时
	db.DB().SetConnMaxLifetime(time.Second * 30)

	//db.AutoMigrate()

	//关闭数据库连接,db会被多个goroutine共享, 可以不调用
	//defer  db.Close()
	DB = db
	return nil
}

// 对外获取数据库连接对象 db
func (m *Pool) GetMysqlDB() *gorm.DB {
	return DB
}


//  使用:
//	获取db单例
//	db := mysql.GetMysqlPool().GetMysqlDB()